package com.free.semantic.core;

import com.free.semantic.common.BaseNode;
import com.free.semantic.common.ParamNode;
import com.free.semantic.common.RangeObj;

import java.util.List;

public interface ConceptInstanceManage {

    ConceptManage concept();

    @Deprecated
    void registerFunction(List<String> sourceObj, String destObj, RelationFunction relationFunction);

    void registerFunction(List<RangeObj> sourceObj, RangeObj destObj, RelationFunction relationFunction);

    void registerFunction(String providerName, FunctionProvider functionProvider);

    void registerFunction(String providerName, ConceptInstanceManage functionProvider);

    @Deprecated
    RelationFunction getFunction(List<String> sourceObj, String destObj);

    RelationFunction getFunction(List<RangeObj> sourceObj, RangeObj destObj);

    List<String> getProviderLs();

    @Deprecated
    <T> List<T> takePath(List<ParamNode> from, String destObject);

    <T> List<T> takePath(List<ParamNode> from, RangeObj destObject);

    <T> List<T> goByLocatorNode(List<BaseNode> sourceObj, RangeObj destObj);

    /**
     * 保持相连事物关系不变的情况下，实现路径不变的情况下，移除事物
     *
     * @param objectName
     */
    void hideObject(List<String> objectName);

}
